package com.tencent.wxpay.protocol.model;

import java.io.Serializable;
import java.util.List;

/**
 * 退款查询
 */
public class RefundQuery implements Serializable {
    private static final long serialVersionUID = 5883414542925313308L;
    /**
     * 商户退款单号
     * 必填：是
     * 描述：商户退款单号
     */
    private String out_refund_no;
    /**
     * 微信退款单号
     * 必填：是
     * 描述：微信退款单号
     */
    private String refund_id;
    /**
     * 退款渠道
     * 必填：否
     * 描述：ORIGINAL—原路退款
     * BALANCE—退回到余额
     */
    private String refund_channel;
    /**
     * 申请退款金额
     * 必填：是
     * 描述：退款总金额,单位为分,可以做部分退款
     */
    private Integer refund_fee;
    /**
     * 退款金额
     * 必填：否
     * 描述：退款金额=申请退款金额-非充值代金券退款金额，退款金额<=申请退款金额
     */
    private Integer settlement_refund_fee;
    /**
     * 代金券类型
     * 必填：否
     * 描述：CASH--充值代金券
     * NO_CASH---非充值代金券
     * 订单使用代金券时有返回（取值：CASH、NO_CASH）
     */
    private String coupon_type;
    /**
     * 代金券退款金额
     * 必填：否
     * 描述：代金券退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为现金，说明详见<a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=12_1">代金券或立减优惠</a>
     */
    private Integer coupon_refund_fee;
    /**
     * 退款代金券使用数量
     * 必填：否
     * 描述：退款代金券使用数量
     */
    private Integer coupon_refund_count;
    /**
     * 退款状态
     * 必填：是
     * 描述：退款状态：
     * SUCCESS—退款成功
     * FAIL—退款失败
     * PROCESSING—退款处理中
     * NOTSURE—未确定，需要商户原退款单号重新发起
     * CHANGE—转入代发，退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，资金回流到商户的现金帐号，需要商户人工干预，通过线下或者财付通转账的方式进行退款。
     */
    private String refund_status;
    /**
     * 退款入账账户
     * 必填：是
     * 描述：取当前退款单的退款入账方
     * 1）退回银行卡：
     * {银行名称}{卡类型}{卡尾号}
     * 2）退回支付用户零钱:
     * 支付用户零钱
     */
    private String refund_recv_accout;
    /**
     * 退款代金券列表
     * 必填：否
     * 描述：退款代金券列表
     */
    private List<CouponRefund> couponRefunds;

    public RefundQuery() {
    }

    public RefundQuery(String out_refund_no, String refund_id, String refund_channel, Integer refund_fee, Integer settlement_refund_fee, String coupon_type, Integer coupon_refund_fee, Integer coupon_refund_count, String refund_status, String refund_recv_accout) {
        this.out_refund_no = out_refund_no;
        this.refund_id = refund_id;
        this.refund_channel = refund_channel;
        this.refund_fee = refund_fee;
        this.settlement_refund_fee = settlement_refund_fee;
        this.coupon_type = coupon_type;
        this.coupon_refund_fee = coupon_refund_fee;
        this.coupon_refund_count = coupon_refund_count;
        this.refund_status = refund_status;
        this.refund_recv_accout = refund_recv_accout;
    }

    public RefundQuery(String out_refund_no, String refund_id, String refund_channel, Integer refund_fee, Integer settlement_refund_fee, String coupon_type, Integer coupon_refund_fee, Integer coupon_refund_count, String refund_status, String refund_recv_accout, List<CouponRefund> couponRefunds) {
        this.out_refund_no = out_refund_no;
        this.refund_id = refund_id;
        this.refund_channel = refund_channel;
        this.refund_fee = refund_fee;
        this.settlement_refund_fee = settlement_refund_fee;
        this.coupon_type = coupon_type;
        this.coupon_refund_fee = coupon_refund_fee;
        this.coupon_refund_count = coupon_refund_count;
        this.refund_status = refund_status;
        this.refund_recv_accout = refund_recv_accout;
        this.couponRefunds = couponRefunds;
    }

    public String getOut_refund_no() {
        return out_refund_no;
    }

    public void setOut_refund_no(String out_refund_no) {
        this.out_refund_no = out_refund_no;
    }

    public String getRefund_id() {
        return refund_id;
    }

    public void setRefund_id(String refund_id) {
        this.refund_id = refund_id;
    }

    public String getRefund_channel() {
        return refund_channel;
    }

    public void setRefund_channel(String refund_channel) {
        this.refund_channel = refund_channel;
    }

    public Integer getRefund_fee() {
        return refund_fee;
    }

    public void setRefund_fee(Integer refund_fee) {
        this.refund_fee = refund_fee;
    }

    public Integer getSettlement_refund_fee() {
        return settlement_refund_fee;
    }

    public void setSettlement_refund_fee(Integer settlement_refund_fee) {
        this.settlement_refund_fee = settlement_refund_fee;
    }

    public String getCoupon_type() {
        return coupon_type;
    }

    public void setCoupon_type(String coupon_type) {
        this.coupon_type = coupon_type;
    }

    public Integer getCoupon_refund_fee() {
        return coupon_refund_fee;
    }

    public void setCoupon_refund_fee(Integer coupon_refund_fee) {
        this.coupon_refund_fee = coupon_refund_fee;
    }

    public Integer getCoupon_refund_count() {
        return coupon_refund_count;
    }

    public void setCoupon_refund_count(Integer coupon_refund_count) {
        this.coupon_refund_count = coupon_refund_count;
    }

    public String getRefund_status() {
        return refund_status;
    }

    public void setRefund_status(String refund_status) {
        this.refund_status = refund_status;
    }

    public String getRefund_recv_accout() {
        return refund_recv_accout;
    }

    public void setRefund_recv_accout(String refund_recv_accout) {
        this.refund_recv_accout = refund_recv_accout;
    }

    public List<CouponRefund> getCouponRefunds() {
        return couponRefunds;
    }

    public void setCouponRefunds(List<CouponRefund> couponRefunds) {
        this.couponRefunds = couponRefunds;
    }
}
